import {
  IsEmail,
  IsNotEmpty,
  IsNumber,
  IsOptional,
  IsString,
  Length,
  Max,
  Min,
} from 'class-validator';

export class CreateUserDto {
  // 校验类型：字符串
  @IsString({ message: '姓名必须是个字符串' })
  // 校验字符串长度：2～16
  @Length(2, 16, {
    /**
     * 内置参数
     * $value：当前值
     * $property：当前属性名
     * $target：当前类
     * $constraint1：最小长度
     * $constraint2：最大长度
     */
    message: '姓名长度必须在$constraint1~$constraint2之间',
  })
  // 校验是否必填：可选值
  @IsOptional()
  name?: string;

  // 校验类型：数字 + 整数
  @IsNumber({ maxDecimalPlaces: 0 }, { message: '年龄必须是个整数' })
  // 校验数字大小：0～100
  @Max(100, { message: '年龄最大不能超过$constraint1' })
  @Min(0, { message: '年龄最小不能低于$constraint1' })
  @IsOptional()
  age?: number;

  // 校验类型：数字 + 小数
  @IsNumber(
    { maxDecimalPlaces: 2 },
    { message: '存款必须是个不超过两位小数的数字' },
  )
  @IsOptional()
  money?: number;

  // 校验类型：字符串 + 邮箱
  @IsEmail({}, { message: '必须是个有效邮箱' })
  // 校验是否必填：必填
  @IsNotEmpty({ message: '邮箱不能为空' })
  email: string;
}
